QT

您所在的位置:网站首页 49 opencv QT

QT

2023-06-16 00:23| 来源: 网络整理| 查看: 265

提示:本文为学习记录,若有疑问,请联系作者。

文章目录 前言一、读取照片二、保存照片三、图像算法1.高斯滤波2.均值滤波3.中值滤波4.双边滤波5.其他操作 四、插值算法五、Mat和QImage互转1.Mat转QImage2.QImage转Mat 六、总结

前言

忙碌里寻宝藏。

opencv主要是对图像进行处理。

一、读取照片

原型 Mat imread( const String& filename, int flags )

第一个参数 filename: 表示图像的路径。 第二个参数 flags:表示读取图像的方式。

IMREAD_UNCHANGED = -1,表示读取原图, 不进行任何改变 IMREAD_GRAYSCALE = 0,表示以灰度图方式读取原图 IMREAD_COLOR = 1,表示以RGB方式读取原图 默认不加 flags 的话,表示不做改变读取原图。 enum ImreadModes { IMREAD_UNCHANGED = -1, //如果设置,则返回的数据带有alpha通道(R,G,B,A 四个通道),否则没有alpha通道 IMREAD_GRAYSCALE = 0, //如果设置,则将图像转换为单通道灰度图像 IMREAD_COLOR = 1, //如果设置,则将图像转换成3通道BGR彩色图像 IMREAD_ANYDEPTH = 2, //如果设置,则在输入具有相应深度时返回16位/32位图像,否则将其转换为8位 IMREAD_ANYCOLOR = 4, //如果设置,则图像可能以任何颜色格式读取 IMREAD_LOAD_GDAL = 8, //如果设置,使用gdal驱动程序加载图像 IMREAD_REDUCED_GRAYSCALE_2 = 16, //如果设置,总是将图像转换为单通道灰度图像且图像大小减少1/2 IMREAD_REDUCED_COLOR_2 = 17, //如果设置,总是将图像转换为3通道BGR彩色图像且图像大小减少1/2 IMREAD_REDUCED_GRAYSCALE_4 = 32, //如果设置,总是将图像转换为单通道灰度图像且图像大小减少1/4 IMREAD_REDUCED_COLOR_4 = 33, //如果设置,总是将图像转换为3通道BGR彩色图像且图像大小减少1/4 IMREAD_REDUCED_GRAYSCALE_8 = 64, //如果设置,总是将图像转换为单通道灰度图像且图像大小减少1/8 IMREAD_REDUCED_COLOR_8 = 65, //如果设置,总是将图像转换为3通道BGR彩色图像且图像大小减少1/8 IMREAD_IGNORE_ORIENTATION = 128 //如果设置,不会根据EXIF的方向标志旋转图像 };

filename 图片路径编译器里面接受 单斜杆/, 双斜杆//, 以及反向双斜杆 \。 不支持反向单斜杆\。 代码如下:

QString filename=QFileDialog::getOpenFileName(this,"打开图像文件","C:\\Users\\lizhifun\\Desktop\\ModelTest\\","Image File(*.bmp;*.png;*.jpg)"); if(filename == "") { QMessageBox::information(this,"提示","文件打开失败!"); return; } Mat img_input = cv::imread(cv::String(filename.toLocal8Bit().toStdString())); if(img_input.empty()) { QMessageBox::information(this,"提示","文件打开失败!"); return; } 二、保存照片 QString filename = QCoreApplication::applicationDirPath(); image.save("./mirror.png"); Mat img_input = cv::imread("./mirror.png"); //Mat转QImage 颜色 cvtColor(img_input,img_input,CV_BGR2RGB); //Mat转QImage 像素 oldlabel放置原图 QImage disimage = QImage(img_input.data,img_input.cols,img_input.rows,img_input.cols*img_input.channels(),QImage::Format_RGB888); Mat retimage; //高斯模糊 GaussianBlur(img_input,retimage,Size(5,5),3,3); GaussianBlur(retimage,retimage,Size(5,5),3,3); //Mat转QImage 像素 newlabel放置图像处理后图片 QImage disimage2 = QImage(retimage.data,retimage.cols,retimage.rows,retimage.cols*retimage.channels(),QImage::Format_RGB888); disimage2 = disimage2.scaled(ui->label_4->width(),ui->label_4->height()); ui->label_4->setPixmap(QPixmap::fromImage(disimage2)); ui->label_4->setScaledContents(true); // QFile m_image("./mirror.png"); // m_image.remove(); 三、图像算法 1.高斯滤波

高斯模糊 GaussianBlur(Mat src, Mat dst, Size(11, 11), sigmax, sigmay); 参数1:输入图片 参数2:输出图片 参数3:内核大小 参数4:高斯核函数在X方向上的标准偏差 参数5:高斯核函数在Y方向上的标准偏差 代码计算:

const long _RADIUS = 10;//10 值越大越模糊 const long _IMAGES = 2; QImage _image[_IMAGES]; /*放在函数里,下面是主要代码*/ //高斯滤波 if (!_IMAGES) return; _image[0] = image; if (_image[0].isNull()) return; for(int i = 1; i { filter::Gauss, filter::Blur1D }, { filter::Gauss, filter::Blur2D } }; filter::bitmap_t bmp; for(int i = 1; i case QImage::Format_RGB888: mat = Mat(image.height(), image.width(), CV_8UC3,(void*)image.constBits(),image.bytesPerLine()); break; case QImage::Format_ARGB32_Premultiplied: mat = Mat(image.height(), image.width(), CV_8UC4,(void*)image.constBits(),image.bytesPerLine()); break; } 六、总结

善于总结,多进一步。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3